import type { FileItem } from "@/api/file/typing";
import type { UploadProps } from "ant-design-vue";

/**文件状态 */
export interface State {
  /**加载状态 */
  loading: boolean;
  /**文件列表 */
  fileList: FileItem[];
}

/**上传文件配置 */
export interface Options {
  /**可接收文件类型 */
  accept: UploadProps["accept"];
  /**文件头ID */
  fileHeaderId: string;
  /**最大文件大小-kb */
  maxFileSize: number;
  /**最大文件数 */
  maxFileNums: number;
  /**分片大小-kb */
  chunkSize: number;
  /**多文件 */
  multiple: boolean;
  /**更新文件头ID */
  onEmit?: (fileHeaderId: string) => void;
}

/**文件上传状态 */
export interface FileState {
  /**原始文件名 */
  originFileName: string;
  /**文件hash */
  fileMd5: string;
  /**分片已上传数量 */
  success: number;
  /**分片 */
  chunkList: Blob[];
  /**上传进度 */
  schedule: number;
  /**节流更新进度 */
  updateSchedule: (fileState: FileState) => void;
}

/**上传状态 */
export interface UploadState {
  /**上传总文件数 */
  total: number;
  /**是否校验通过 */
  valid: boolean;
  /**上传成功数量 */
  success: number;
  /**文件上传状态 */
  stateList: FileState[];
  /**合并队列 */
  mergeQueue: (() => Promise<void>)[];
  /**合并状态 */
  mergeState: boolean;
}
